package simonby.top.annualring.domain.repository;

import simonby.top.annualring.domain.model.FamilyTree;
import java.util.List;
import java.util.Optional;

/**
 * 家族树仓储接口
 * 定义家族树相关的数据访问操作
 */
public interface FamilyTreeRepository {
    /**
     * 保存家族树
     * @param familyTree 家族树实体
     * @return 保存后的家族树
     */
    FamilyTree save(FamilyTree familyTree);

    /**
     * 根据ID查找家族树
     * @param id 家族树ID
     * @return 家族树对象
     */
    Optional<FamilyTree> findById(Long id);

    /**
     * 根据创建者ID查找家族树
     * @param creatorId 创建者ID
     * @return 家族树列表
     */
    List<FamilyTree> findByCreatorId(Long creatorId);

    /**
     * 查找所有家族树
     * @return 家族树列表
     */
    List<FamilyTree> findAll();

    /**
     * 删除家族树
     * @param id 家族树ID
     */
    void deleteById(Long id);

    /**
     * 根据名称查找家族树
     * @param name 家族树名称
     * @return 家族树对象
     */
    Optional<FamilyTree> findByName(String name);
}